/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package 处理01;

import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * @description 异常处理
 *          使程序简洁更易维护
 *          抓抛模型
 *          抛 ：程序一旦出现异常 就会在异常代码处生成一个对应异常的对象 并将对象抛出
 *              抛出之后 之后的代码不再执行
 *          抓 ：Try_Catch_Finally机制 throws机制
 *
 *          Try_Catch_Finally机制 try内若异常则执行： catch的执行体（符合哪个执行哪个）
 *             可以嵌套               整个结构之外的一定执行
 *                               写在Finally中的情况： 像数据库连接 IO流 网络编程的连接 JVM不能自动回收 我们需要自己进行释放
 *                                  运行时异常一边不用这个该方法
 *          try{
 *              // 可能出现异常的代码
 *          }catch(异常类型1 变量名1){
 *              // 处理异常1的方式
 *          }catch(异常类型2 变量名2){
 *              // 处理异常2的方式
 *          }catch(异常类型n 变量名n){
 *              // 处理异常n的方式
 *          }finally{ //可选的
 *              // 一定会执行的代码，及时catch执行有异常 try中有return
 *          }
 * @author 俊昭
 * @date 2022/4/10
*/
public class Try_Catch_FinallyTest {

    @Test
    public void test06(){
        try{
            int a = 2;
            int b = 0;
            System.out.println(a / b);
        }catch(ArithmeticException e){
            System.out.println(e.getMessage());// / by zero

            String str = "abc";
            System.out.println(1);
            int a = Integer.parseInt(str);

        }finally {
            System.out.println("一定会执行");
        }

    }
    @Test
    public void test04(){
        String str = "abc";
        System.out.println(1);

        try{

            int a = Integer.parseInt(str);
            System.out.println(2);

        }catch (NumberFormatException e){
            System.err.println("数值转换异常");

            System.out.println(e.getMessage());//For input string: "abc"
            e.printStackTrace();

            System.out.println(3);
        }catch (ArithmeticException e) {
            System.err.println("算术异常");
            System.out.println(4);
        }
        System.out.println(5);

    }

    @Test
    public void test01(){
        FileInputStream fis=null;
        try{
            File file = new File("Hello.txt");
            fis =new FileInputStream(file);// FileNotFoundException

            int data = fis.read();// IOException
            while (data!=-1){
                System.out.print((char) data);
                data= fis.read();// IOException
            }

            fis.close();// IOException
        }catch (FileNotFoundException e){// 属于 IOException
            System.out.println(e.getMessage());// Hello.txt (系统找不到指定的文件。)
        }catch (IOException e){
            System.out.println(e.getMessage());
        }finally {
            try {
                if (fis!=null){// 没有的话可能会有空指针
                    fis.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
